home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / x / volume18 / olvwm-3.0 / patch2.02 < prev    next >
Encoding:
Text File  |  1992-07-22  |  50.5 KB  |  1,574 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!munnari.oz.au!mips!mips!msi!dcmartin
  3. From: sdo@soliado.East.Sun.COM (Scott Oaks - Sun Consulting NYC)
  4. Subject: v18i049: olvwm 3.0, Patch2, Part02/04
  5. Message-ID: <1992Jul22.152507.19187@msi.com>
  6. Originator: dcmartin@fascet
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Organization: Molecular Simulations, Inc.
  9. References: <csx-18i048-olvwm-3.0@uunet.UU.NET>
  10. Date: Wed, 22 Jul 1992 15:25:07 GMT
  11. Approved: dcmartin@msi.com
  12. Lines: 1560
  13.  
  14. Submitted-by: sdo@soliado.East.Sun.COM (Scott Oaks - Sun Consulting NYC)
  15. Posting-number: Volume 18, Issue 49
  16. Archive-name: olvwm-3.0/patch2.02
  17. Patch-To: olvwm-3.0: Volume 15, Issue 167
  18.  
  19. #!/bin/sh
  20. # this is part.02 (part 2 of a multipart archive)
  21. # do not concatenate these parts, unpack them in order with /bin/sh
  22. # file olvwm3.Patch02 continued
  23. #
  24. if test ! -r _shar_seq_.tmp; then
  25.     echo 'Please unpack part 1 first!'
  26.     exit 1
  27. fi
  28. (read Scheck
  29.  if test "$Scheck" != 2; then
  30.     echo Please unpack part "$Scheck" next!
  31.     exit 1
  32.  else
  33.     exit 0
  34.  fi
  35. ) < _shar_seq_.tmp || exit 1
  36. if test ! -f _shar_wnt_.tmp; then
  37.     echo 'x - still skipping olvwm3.Patch02'
  38. else
  39. echo 'x - continuing file olvwm3.Patch02'
  40. sed 's/^X//' << 'SHAR_EOF' >> 'olvwm3.Patch02' &&
  41. !     menu = GetEnabledMenu(win->core.client, fullsize,
  42. X                  False, win->core.client->sticky);
  43. X  
  44. X      if (!menu)
  45. *** BUILD/moveresize.c    Sat Jun 13 15:51:02 1992
  46. --- src/moveresize.c    Sat Jun 13 15:48:41 1992
  47. ***************
  48. *** 4,10 ****
  49. X   *      file for terms of the license.
  50. X   */
  51. X  
  52. ! #ident "@(#)moveresize.c    1.2 olvwm version 1/27/92"
  53. X  
  54. X  /*
  55. X   * Based on
  56. --- 4,10 ----
  57. X   *      file for terms of the license.
  58. X   */
  59. X  
  60. ! #ident "@(#)moveresize.c    1.3 olvwm version 6/13/92"
  61. X  
  62. X  /*
  63. X   * Based on
  64. ***************
  65. *** 130,136 ****
  66. X      ScreenInfo *scrinfo;
  67. X      char *proto;
  68. X  {
  69. -     int width, height;
  70. X      XSetWindowAttributes attr;
  71. X      StatusWinInfo *sw;
  72. X      int    changed, x, y, w, h;
  73. --- 130,135 ----
  74. ***************
  75. *** 274,280 ****
  76. X  {
  77. X  Region        new;
  78. X  XRectangle    rect;
  79. - int        stacking_order;
  80. X  
  81. X      if (!cli->framewin)
  82. X      return NULL;
  83. --- 273,278 ----
  84. ***************
  85. *** 345,353 ****
  86. X      Window        root;
  87. X  
  88. X      vdm = cli->scrInfo->vdm;
  89. !     if (vdm && vdm->client->wmState != IconicState &&
  90. !         vdm->client != cli && GRV.AllowMoveIntoDesktop) {
  91. !         mstuff.check_vdm = True;
  92. X          XGetGeometry(dpy, vdm->client->framewin->core.self,
  93. X               &root, &x, &y, &w, &h, &bw, &d);
  94. X          mstuff.vdm_screenX = x;
  95. --- 343,350 ----
  96. X      Window        root;
  97. X  
  98. X      vdm = cli->scrInfo->vdm;
  99. !     if (vdm && vdm->client->wmState != IconicState && vdm->client != cli) {
  100. !         mstuff.check_vdm = GRV.AllowMoveIntoDesktop;
  101. X          XGetGeometry(dpy, vdm->client->framewin->core.self,
  102. X               &root, &x, &y, &w, &h, &bw, &d);
  103. X          mstuff.vdm_screenX = x;
  104. ***************
  105. *** 362,369 ****
  106. X          rect.width = w;
  107. X          rect.height = h;
  108. X      }
  109. !     else mstuff.check_vdm = False;
  110. !         mstuff.vdm = vdm;
  111. X      }
  112. X  
  113. X      mstuff.dpy = dpy;
  114. --- 359,376 ----
  115. X          rect.width = w;
  116. X          rect.height = h;
  117. X      }
  118. !     else {
  119. !         mstuff.vdm = vdm;
  120. !         mstuff.check_vdm = False;
  121. !     }
  122. !     if (first) {
  123. !         if (first->xmotion.window == PANEWINOFCLIENT(vdm->client))
  124. !             mstuff.inVDM = True;
  125. !         else if (VGetInfo(first->xmotion.window))
  126. !             mstuff.inVDM = True;
  127. !         else mstuff.inVDM = False;
  128. !     }
  129. !     else mstuff.inVDM = False;
  130. X      }
  131. X  
  132. X      mstuff.dpy = dpy;
  133. ***************
  134. *** 432,438 ****
  135. X          mstuff.num_children = 0;
  136. X          mstuff.vdm_stacking_order =
  137. X          getWindowStackingOrder(mstuff.vdm->client->framewin->core.self,
  138. !                     mstuff);
  139. X          ListApply(ActiveClientList, moveAddRegion, &mstuff);
  140. X      }
  141. X      else mstuff.region = NULL;
  142. --- 439,445 ----
  143. X          mstuff.num_children = 0;
  144. X          mstuff.vdm_stacking_order =
  145. X          getWindowStackingOrder(mstuff.vdm->client->framewin->core.self,
  146. !                     &mstuff);
  147. X          ListApply(ActiveClientList, moveAddRegion, &mstuff);
  148. X      }
  149. X      else mstuff.region = NULL;
  150. ***************
  151. *** 526,534 ****
  152. X              mstuff->inVDM = True;
  153. X          else if (mstuff->dragwin) {
  154. X              /*
  155. !              * If we're dragging the window and the event is on the window's
  156. !              * frame (ie we moved just a little) see if we're over the vdm.
  157. !              * If so, move into the vdm
  158. X               */
  159. X          }    
  160. X          else mstuff->inVDM = False;
  161. --- 533,541 ----
  162. X              mstuff->inVDM = True;
  163. X          else if (mstuff->dragwin) {
  164. X              /*
  165. !              * If we're dragging the window, then we took care of setting
  166. !          * the VDM when we do the regioning stuff.
  167. !          * REMIND:  Can we ever get here?
  168. X               */
  169. X          }    
  170. X          else mstuff->inVDM = False;
  171. ***************
  172. *** 536,542 ****
  173. X      else mstuff->inVDM = XPointInRegion(mstuff->region,
  174. X                  event->xmotion.x_root, event->xmotion.y_root);
  175. X      }
  176. !     else mstuff->inVDM = False;
  177. X  
  178. X      if (mstuff->inVDM) {
  179. X          mstuff->offX = (mstuff->curX - mstuff->vdm_screenX) *
  180. --- 543,557 ----
  181. X      else mstuff->inVDM = XPointInRegion(mstuff->region,
  182. X                  event->xmotion.x_root, event->xmotion.y_root);
  183. X      }
  184. ! #if 0
  185. !     else if (!GRV.AllowMoveIntoDesktop) {
  186. !     if (VGetInfo(event->xmotion.window))
  187. !         mstuff->inVDM = True;
  188. !     else if (event->xmotion.window == PANEWINOFCLIENT(mstuff->vdm->client))
  189. !         mstuff->inVDM = True;
  190. !         else mstuff->inVDM = False;
  191. !     }
  192. ! #endif
  193. X  
  194. X      if (mstuff->inVDM) {
  195. X          mstuff->offX = (mstuff->curX - mstuff->vdm_screenX) *
  196. ***************
  197. *** 935,941 ****
  198. X  int    dw, dh;
  199. X  int     offX, offY;
  200. X  int    newScreenX, curScreenX,    newScreenY, curScreenY;
  201. - int    width, height;
  202. X  Client    *leader;
  203. X  
  204. X      if (win->core.client->flags & CLMoved)
  205. --- 950,955 ----
  206. ***************
  207. *** 943,950 ****
  208. X      dw = DisplayWidth(win->core.client->dpy, win->core.client->screen);
  209. X      dh = DisplayHeight(win->core.client->dpy, win->core.client->screen);
  210. X      windowOff(win, mstuff, &offX, &offY);
  211. -     width = win->core.width;
  212. -     height = win->core.height;
  213. X      if (GRV.VirtualMoveGroups) {
  214. X      switch(win->core.client->groupmask) {
  215. X          case GROUP_LEADER:
  216. --- 957,962 ----
  217. ***************
  218. *** 961,971 ****
  219. X          doConfigOneWindow(win, mstuff);
  220. X          return (void *) 0;
  221. X      }
  222. !     curScreenX = (win->core.x - mstuff->vdm->offsetX) / dw;
  223. !     newScreenX = (win->core.x + offX - mstuff->vdm->offsetX) / dw;
  224. X      mstuff->targetScreenX = newScreenX - curScreenX;
  225. !     curScreenY = (win->core.y - mstuff->vdm->offsetY) / dh;
  226. !     newScreenY = (win->core.y + offY - mstuff->vdm->offsetY) / dh;
  227. X      mstuff->targetScreenY = newScreenY - curScreenY;
  228. X      if (mstuff->targetScreenY == 0 && mstuff->targetScreenX == 0)
  229. X          doConfigOneWindow(win, mstuff);
  230. --- 973,987 ----
  231. X          doConfigOneWindow(win, mstuff);
  232. X          return (void *) 0;
  233. X      }
  234. !     curScreenX = (win->core.x + (win->core.width / 2) -
  235. !                 mstuff->vdm->offsetX) / dw;
  236. !     newScreenX = (win->core.x + (win->core.width / 2) +
  237. !                 offX - mstuff->vdm->offsetX) / dw;
  238. X      mstuff->targetScreenX = newScreenX - curScreenX;
  239. !     curScreenY = (win->core.y + (win->core.height / 2) -
  240. !                 mstuff->vdm->offsetY) / dh;
  241. !     newScreenY = (win->core.y + (win->core.height / 2) +
  242. !                 offY - mstuff->vdm->offsetY) / dh;
  243. X      mstuff->targetScreenY = newScreenY - curScreenY;
  244. X      if (mstuff->targetScreenY == 0 && mstuff->targetScreenX == 0)
  245. X          doConfigOneWindow(win, mstuff);
  246. ***************
  247. *** 1147,1154 ****
  248. X      drawDouble(rstuff->cli->dpy,
  249. X          PANEWINOFCLIENT(rstuff->cli->scrInfo->vdm->client),
  250. X          WinGC(rstuff->cli->framewin, ROOT_GC),
  251. !         rstuff->winX / rstuff->cli->scrInfo->vdm->resources->scale,
  252. !         rstuff->winY / rstuff->cli->scrInfo->vdm->resources->scale,
  253. X          rstuff->winW / rstuff->cli->scrInfo->vdm->resources->scale,
  254. X          rstuff->winH / rstuff->cli->scrInfo->vdm->resources->scale);
  255. X  }
  256. --- 1163,1172 ----
  257. X      drawDouble(rstuff->cli->dpy,
  258. X          PANEWINOFCLIENT(rstuff->cli->scrInfo->vdm->client),
  259. X          WinGC(rstuff->cli->framewin, ROOT_GC),
  260. !         (rstuff->winX - rstuff->cli->scrInfo->vdm->offsetX) /
  261. !                 rstuff->cli->scrInfo->vdm->resources->scale,
  262. !         (rstuff->winY - rstuff->cli->scrInfo->vdm->offsetY) /
  263. !                 rstuff->cli->scrInfo->vdm->resources->scale,
  264. X          rstuff->winW / rstuff->cli->scrInfo->vdm->resources->scale,
  265. X          rstuff->winH / rstuff->cli->scrInfo->vdm->resources->scale);
  266. X  }
  267. ***************
  268. *** 1455,1461 ****
  269. X      WinGeneric *w;
  270. X      ResizeClosure *rstuff;
  271. X  {
  272. -     int dx, dy;
  273. X      unsigned int mask;
  274. X      SemanticAction action;
  275. X  
  276. --- 1473,1478 ----
  277. ***************
  278. *** 1572,1578 ****
  279. --- 1589,1600 ----
  280. X      Window root = WinRootID(cli->framewin);
  281. X      Time timestamp;
  282. X      int frameMinWidth, frameMinHeight;
  283. +     Cursor    resizePointer;
  284. X  
  285. +     if (GRV.SpecialResizePointers)
  286. +     resizePointer = GRV.ResizePointers[corner];
  287. +     else resizePointer = GRV.ResizePointer;
  288. X      if (trigger == NULL || trigger->type == KeyPress) {
  289. X      if (trigger == NULL)
  290. X          timestamp = CurrentTime;
  291. ***************
  292. *** 1610,1616 ****
  293. X      if (XGrabPointer(cli->dpy, root, True,
  294. X               ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
  295. X               GrabModeAsync, GrabModeAsync, root,
  296. !              GRV.ResizePointer, timestamp) != GrabSuccess)
  297. X      {
  298. X      ErrorWarning(gettext("failed to grab pointer"));
  299. X      return;
  300. --- 1632,1638 ----
  301. X      if (XGrabPointer(cli->dpy, root, True,
  302. X               ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
  303. X               GrabModeAsync, GrabModeAsync, root,
  304. !              resizePointer, timestamp) != GrabSuccess)
  305. X      {
  306. X      ErrorWarning(gettext("failed to grab pointer"));
  307. X      return;
  308. *** BUILD/ol_button.c    Sat Jun 13 15:50:28 1992
  309. --- src/ol_button.c    Sat Jun 13 15:43:24 1992
  310. ***************
  311. *** 1,4 ****
  312. ! #ident "@(#)ol_button.c    1.1 olvwm version 1/3/92"
  313. X  
  314. X  /*
  315. X   * Based on
  316. --- 1,4 ----
  317. ! #ident "@(#)ol_button.c    1.2 olvwm version 6/13/92"
  318. X  
  319. X  /*
  320. X   * Based on
  321. ***************
  322. *** 338,344 ****
  323. X  {
  324. X  
  325. X  
  326. !     char            string[2];
  327. X      XSegment        seg[4];
  328. X  
  329. X  
  330. --- 338,344 ----
  331. X  {
  332. X  
  333. X  
  334. !     unsigned char   string[2];
  335. X      XSegment        seg[4];
  336. X  
  337. X  
  338. *** BUILD/olvwm.man    Sat Jun 13 15:51:03 1992
  339. --- src/olvwm.man    Sat Jun 13 15:43:25 1992
  340. ***************
  341. *** 1,7 ****
  342. ! .\" @(#)olvwm.man    1.2 olvwm version 1/27/92
  343. ! .TH OLVWM 1 "15 November 1991"
  344. X  .SH NAME
  345. ! olvwm \- OPEN LOOK virtual window manager for OpenWindows
  346. X  .SH SYNOPSIS
  347. X  .B olvwm
  348. X  [
  349. --- 1,7 ----
  350. ! .\" @(#)olvwm.man    1.3 olvwm version 6/13/92
  351. ! .TH OLVWM 1 "22 May 1992"
  352. X  .SH NAME
  353. ! olvwm \- OPEN LOOK virtual window manager for X11 and OpenWindows
  354. X  .SH SYNOPSIS
  355. X  .B olvwm
  356. X  [
  357. ***************
  358. *** 34,41 ****
  359. X  .\" ========================================================================
  360. X  .SH OPTIONS
  361. X  .LP
  362. ! There are no new options to
  363. X  .B olvwm.
  364. X  .\" ========================================================================
  365. X  .SH TERMINOLOGY
  366. X  Throughout this manual, the following terms are used:
  367. --- 34,46 ----
  368. X  .\" ========================================================================
  369. X  .SH OPTIONS
  370. X  .LP
  371. ! There is one new option to
  372. X  .B olvwm.
  373. + .TP
  374. + -allowSynthetic
  375. + Allow the receipt of synthetic events.  Note that this argument only
  376. + permits synthetic events to be enabled; whether or not synthetic events
  377. + are delivered is controlled via the SyntheticEvents resource variable.
  378. X  .\" ========================================================================
  379. X  .SH TERMINOLOGY
  380. X  Throughout this manual, the following terms are used:
  381. ***************
  382. *** 69,75 ****
  383. X  displays a virtual desktop manager window.
  384. X  The VDM is a reduced display of all windows active on the desktop at any
  385. X  time.  The current view is outlined in the virtual desktop manager.
  386. ! The VDM always appears on the monitor.
  387. X  .LP
  388. X  By default, the VDM (and hence the desktop) is divided into a grid; each
  389. X  square of the grid represents a screen size.  The dividing lines between
  390. --- 74,80 ----
  391. X  displays a virtual desktop manager window.
  392. X  The VDM is a reduced display of all windows active on the desktop at any
  393. X  time.  The current view is outlined in the virtual desktop manager.
  394. ! The VDM always appears on the screen.
  395. X  .LP
  396. X  By default, the VDM (and hence the desktop) is divided into a grid; each
  397. X  square of the grid represents a screen size.  The dividing lines between
  398. ***************
  399. *** 100,107 ****
  400. X  .LP
  401. X  SELECTing and dragging one or more virtual windows will move the real and
  402. X  virtual windows (just as in 
  403. ! .B olwm
  404. ! ).  Note that if you drag the mouse outside of the VDM, the window can be
  405. X  moved onto to the screen.  Conversely, when dragging
  406. X  a window on the screen, if the mouse moves into the VDM, the window will then
  407. X  be moved to the location on the displayed within the VDM.
  408. --- 105,111 ----
  409. X  .LP
  410. X  SELECTing and dragging one or more virtual windows will move the real and
  411. X  virtual windows (just as in 
  412. ! \fBolwm\fP).  Note that if you drag the mouse outside of the VDM, the window can be
  413. X  moved onto to the screen.  Conversely, when dragging
  414. X  a window on the screen, if the mouse moves into the VDM, the window will then
  415. X  be moved to the location on the displayed within the VDM.
  416. ***************
  417. *** 118,129 ****
  418. X  .SH EVENTS ON THE VDM BACKGROUND
  419. X  .LP
  420. X  Events on the VDM background all work to change the current view, bringing
  421. ! windows which were formerly outside of the viewing area onto the screen (and
  422. ! moving windows which were on the screen outside of the viewing area).
  423. ! Keyboard events are described given the default Sun-4 keyboard mappings,
  424. X  but you can use xmodmap to set up your particular keyboard.
  425. X  .IP \fBKeyboard\ Events:\fP
  426. ! The arrow keys (and other keys) can be used to shift the logical screen in
  427. X  the direction specified.  See the section on ADDITIONAL KEY BINDINGS
  428. X  below.  Keyboard events are also active if they occur on the root window
  429. X  in addition to the VDM background.
  430. --- 122,133 ----
  431. X  .SH EVENTS ON THE VDM BACKGROUND
  432. X  .LP
  433. X  Events on the VDM background all work to change the current view, bringing
  434. ! windows which were formerly outside of the current view onto the screen (and
  435. ! moving windows which were on the screen outside of the current view).
  436. ! Keyboard events are described given the default Sun Type-4 keyboard mappings,
  437. X  but you can use xmodmap to set up your particular keyboard.
  438. X  .IP \fBKeyboard\ Events:\fP
  439. ! The arrow keys (and other keys) can be used to shift the current view in
  440. X  the direction specified.  See the section on ADDITIONAL KEY BINDINGS
  441. X  below.  Keyboard events are also active if they occur on the root window
  442. X  in addition to the VDM background.
  443. ***************
  444. *** 186,192 ****
  445. X  will always appear in the same place on the screen no matter which part
  446. X  of the virtual desktop you're looking at.  Windows which are not sticky
  447. X  (by default, all windows except the VDM) will move when you change the
  448. ! view on the virtual desktop.
  449. X  .\" ========================================================================
  450. X  .SH CHANGES TO ROOT MENU
  451. X  .LP
  452. --- 190,196 ----
  453. X  will always appear in the same place on the screen no matter which part
  454. X  of the virtual desktop you're looking at.  Windows which are not sticky
  455. X  (by default, all windows except the VDM) will move when you change the
  456. ! current view on the virtual desktop.
  457. X  .\" ========================================================================
  458. X  .SH CHANGES TO ROOT MENU
  459. X  .LP
  460. ***************
  461. *** 195,201 ****
  462. X  .IP COLUMNS
  463. X  This specifies the number of columns you'd like the menu to have.  Each column
  464. X  within a menu will be filled in order of the items in the menu.  The menu
  465. ! name must appear before this keyword, but the keyword itself must appear
  466. X  before the end of the menu.
  467. X  .IP STICK_UNSTICK_SELN
  468. X  This specifies that the sticky state of the selected windows should
  469. --- 199,205 ----
  470. X  .IP COLUMNS
  471. X  This specifies the number of columns you'd like the menu to have.  Each column
  472. X  within a menu will be filled in order of the items in the menu.  The menu
  473. ! name must appear before this keyword, and the keyword itself must appear
  474. X  before the end of the menu.
  475. X  .IP STICK_UNSTICK_SELN
  476. X  This specifies that the sticky state of the selected windows should
  477. ***************
  478. *** 202,220 ****
  479. X  be toggled.
  480. X  .IP WINMENU
  481. X  brings up a pull-right menu containing the name of every window on the
  482. ! virtual desktop.  Windows which are iconified are preceded with a graphic
  483. X  symbol.  Selecting one of these windows causes the view into the desktop
  484. X  to shift so that the selected window is visible; the selected window will
  485. X  be opened if iconic and raised to the top of the stacking order.  This
  486. ! behavior can be altered; see the 
  487. X  .I olvwmrc(5)
  488. ! for more details.  You may specify that the number of columns in the pull-right
  489. ! menu by using a number after the WINMENU keyword.
  490. X  .IP DIRMENU
  491. X  brings up a pull-right menu containing the name of every file given in the
  492. ! named directory.  This allow syou to use a local programs directory for a
  493. X  tool repository; whenever tools are added to the directory, users will see
  494. ! the new choices.
  495. X  .IP X11\ Bitmaps
  496. X  can be specified in the menu by specifying a filename enclosed in <> brackets.
  497. X  The filename specified must be in X11 bitmap form.  You can mix bitmap and
  498. --- 206,233 ----
  499. X  be toggled.
  500. X  .IP WINMENU
  501. X  brings up a pull-right menu containing the name of every window on the
  502. ! current monitor (if
  503. ! .B olvwm
  504. ! is managing multiple monitors, only windows on the current monitor will be
  505. ! shown).  Windows which are iconified are preceded with a graphic
  506. X  symbol.  Selecting one of these windows causes the view into the desktop
  507. X  to shift so that the selected window is visible; the selected window will
  508. X  be opened if iconic and raised to the top of the stacking order.  This
  509. ! behavior can be altered; see 
  510. X  .I olvwmrc(5)
  511. ! for more details.  You may specify the number of columns in the pull-right
  512. ! menu by using a number after the WINMENU keyword.  By default, the order of
  513. ! the menu is alphabetic; see the SortMenuType resource below for more options.
  514. X  .IP DIRMENU
  515. X  brings up a pull-right menu containing the name of every file given in the
  516. ! named directory.  This allows you to use a local programs directory for a
  517. X  tool repository; whenever tools are added to the directory, users will see
  518. ! the new choices.  The directory name may contain environmental variables
  519. ! (e.g. $OPENWINHOME).  You may also specify a regular expression as the
  520. ! file part of DIRMENU; e.g. $OPENWINHOME/bin/x* would display only those
  521. ! programs in the openwindows bin directory which begin with an x.  Regular
  522. ! expressions do not apply to the directory name; $OPENWINHOME/b*/x* is 
  523. ! an invalid DIRMENU entry.
  524. X  .IP X11\ Bitmaps
  525. X  can be specified in the menu by specifying a filename enclosed in <> brackets.
  526. X  The filename specified must be in X11 bitmap form.  You can mix bitmap and
  527. ***************
  528. *** 233,239 ****
  529. X  .sp
  530. X  Programs                 MENU
  531. X  Programs        COLUMNS 2
  532. !         <usr/openwin/include/X11/bitmaps/terminal>  DEFAULT cmdtool
  533. X          "Text Editor"           textedit
  534. X          Mail                    mailtool
  535. X          "File Manager"          filemgr
  536. --- 246,252 ----
  537. X  .sp
  538. X  Programs                 MENU
  539. X  Programs        COLUMNS 2
  540. !         </usr/openwin/include/X11/bitmaps/terminal>  DEFAULT cmdtool
  541. X          "Text Editor"           textedit
  542. X          Mail                    mailtool
  543. X          "File Manager"          filemgr
  544. ***************
  545. *** 256,261 ****
  546. --- 269,288 ----
  547. X  Exit            EXIT
  548. X  .fi
  549. X  .\" ========================================================================
  550. + .SH MISCELLANEOUS NEW FEATURES
  551. + .LP
  552. + This section describes miscellaneous window manager features which are not
  553. + directly related to the virtual nature of
  554. + .B olvwm.
  555. + .LP
  556. + Upon receiving a USR1 signal,
  557. + .B olvwm
  558. + will execute a RESTART function just like the restart function available from
  559. + the root menu.
  560. + .LP
  561. + The root workspace will not be repainted on exit if the PaintWorkspace
  562. + resource is False.
  563. + .\" ==========================================================================
  564. X  .SH RESOURCES TO CONTROL THE VIRTUAL DESKTOP
  565. X  See the man page for
  566. X  .B olwm
  567. ***************
  568. *** 277,283 ****
  569. X  Specifies the size of the virtual desktop.  You can specify this in
  570. X  terms of screen sizes, so that a virtual desktop of 3 screens across
  571. X  and 2 screens high would appear as the string 3x2.  You may also
  572. ! specify this in terms of absolute pixel sizes, e.g. 3800x1800 as
  573. X  long as the pixel size is greater than the size of your framebuffer.
  574. X  .I
  575. X  Default value: 3x2
  576. --- 304,310 ----
  577. X  Specifies the size of the virtual desktop.  You can specify this in
  578. X  terms of screen sizes, so that a virtual desktop of 3 screens across
  579. X  and 2 screens high would appear as the string 3x2.  You may also
  580. ! specify this in terms of absolute pixel sizes, e.g. 3800x1800, as
  581. X  long as the pixel size is greater than the size of your framebuffer.
  582. X  .I
  583. X  Default value: 3x2
  584. ***************
  585. *** 305,311 ****
  586. X  Default value: +0+0
  587. X  .P
  588. X  .TP
  589. ! .BI VirtualIconic " (Boolean)"
  590. X  If true, the virtual desk manager will come up iconic.
  591. X  .I
  592. X  Default value:  False
  593. --- 332,338 ----
  594. X  Default value: +0+0
  595. X  .P
  596. X  .TP
  597. ! .BI VirtualIconic " (Boolean)" *
  598. X  If true, the virtual desk manager will come up iconic.
  599. X  .I
  600. X  Default value:  False
  601. ***************
  602. *** 373,379 ****
  603. X  The list of windows which should be sticky by default.  Like the olwm
  604. X  MinimalDecor, this should be the list windows which should be sticky when
  605. X  they are created.  The matching of these strings is done by the first word
  606. ! of the window's WM_NAME (string in it's title bar), or by its WM_CLASS
  607. X  class/instance variables.
  608. X  .I
  609. X  Default value:  Null
  610. --- 400,406 ----
  611. X  The list of windows which should be sticky by default.  Like the olwm
  612. X  MinimalDecor, this should be the list windows which should be sticky when
  613. X  they are created.  The matching of these strings is done by the first word
  614. ! of the window's WM_NAME (string in its title bar), or by its WM_CLASS
  615. X  class/instance variables.
  616. X  .I
  617. X  Default value:  Null
  618. ***************
  619. *** 418,424 ****
  620. X  Default value:  False
  621. X  .P
  622. X  .TP
  623. ! .BI VirtualMoveGroups " (Boolean)"
  624. X  If true, then whenever a window is moved to a different logical screen,
  625. X  then all followers of that window will also be moved a similar
  626. X  amount:  this affects the window's icon and popups.  In this way, icons
  627. --- 445,451 ----
  628. X  Default value:  False
  629. X  .P
  630. X  .TP
  631. ! .BI VirtualMoveGroup " (Boolean)"
  632. X  If true, then whenever a window is moved to a different logical screen,
  633. X  then all followers of that window will also be moved a similar
  634. X  amount:  this affects the window's icon and popups.  In this way, icons
  635. ***************
  636. *** 426,448 ****
  637. X  corresponding base frame.  Otherwise, only the
  638. X  selected windows will move when you move them, and related windows could
  639. X  possibly appear on different logical screens in the desktop.  The trigger
  640. ! for changing between logical screens is the window's upper-left-hand corner;
  641. ! see VirtualGroupThreshold below.
  642. X  .I
  643. X  Default value:    True
  644. X  .P
  645. X  .TP
  646. - .BI VirtualGroupThreshold " (Integer)"
  647. - If VirtualMoveGroups, this is the amount by which the upper-left-hand
  648. - corner of a window must be moved off the monitor for
  649. - .I olvwm
  650. - to consider the window to have switched logical screens.  Setting this to
  651. - a positive value allows the left edge of windows to appear off the
  652. - monitor without moving the window's popups.
  653. - .I
  654. - Default value:  0
  655. - .P
  656. - .TP
  657. X  .BI UseImages " (UseNone, UseVDM, or UseAll)"
  658. X  If set to UseNone, then window frame menus and the VDM motion menu
  659. X  will be text-based.
  660. --- 453,465 ----
  661. X  corresponding base frame.  Otherwise, only the
  662. X  selected windows will move when you move them, and related windows could
  663. X  possibly appear on different logical screens in the desktop.  The trigger
  664. ! for changing between logical screens is the window's mid-point; all windows
  665. ! in the group will appear on the same logical screen as the mid-point of the
  666. ! moved window.
  667. X  .I
  668. X  Default value:    True
  669. X  .P
  670. X  .TP
  671. X  .BI UseImages " (UseNone, UseVDM, or UseAll)"
  672. X  If set to UseNone, then window frame menus and the VDM motion menu
  673. X  will be text-based.
  674. ***************
  675. *** 454,473 ****
  676. X  Default value:    UseVDM
  677. X  .P
  678. X  .TP
  679. ! .BI PointerWorkspace " (Boolean)"
  680. ! If set to True, olvwm will not change the pointer when it is over a window
  681. ! frame.  This is useful in conjunction with xsetroot -cursor if you want
  682. ! the specified cursor to be active over frames.
  683. X  .I
  684. ! Default value:  False
  685. ! .P
  686. ! .TP
  687. ! .BI SaveWorkspaceCmd " (String)"
  688. ! If set, this is the command that will be run when the SAVE_WORKSPACE command
  689. ! is selected off the main menu.  Otherwise, the default command is run.
  690. ! .I
  691. ! Default value: owplaces -silent -multi -script -tw -output $HOME/.openwin-init
  692. ! .P
  693. X  .\" ========================================================================
  694. X  .SH ADDITIONAL MISCELLANEOUS RESOURCES
  695. X  .LP
  696. --- 471,483 ----
  697. X  Default value:    UseVDM
  698. X  .P
  699. X  .TP
  700. ! .BI SortMenuType " (Enum)"
  701. ! This option controls how windows appearing in the WINMENU command are sorted.
  702. ! If it is set to Alphabetic, then windows will be sorted alphabetically
  703. ! by name.  If it is set to Youngest, then windows will be sorted from youngest
  704. ! to oldest.
  705. X  .I
  706. ! Default value:  Alphabetic
  707. X  .\" ========================================================================
  708. X  .SH ADDITIONAL MISCELLANEOUS RESOURCES
  709. X  .LP
  710. ***************
  711. *** 525,531 ****
  712. X  .I olvwm
  713. X  to ignore completely the window, while this attribute does not adorn the
  714. X  window or give it a menu, but still allows it to be manipulated via the
  715. ! WINMENU and Hot Key actions.
  716. X  .P
  717. X  .TP
  718. X  .BI ResizeMoveGeometry " (X geometry string or the word center)"
  719. --- 535,542 ----
  720. X  .I olvwm
  721. X  to ignore completely the window, while this attribute does not adorn the
  722. X  window or give it a menu, but still allows it to be manipulated via the
  723. ! WINMENU and Hot Key actions.  Normal olwm keys are ignored by these windows,
  724. ! however.
  725. X  .P
  726. X  .TP
  727. X  .BI ResizeMoveGeometry " (X geometry string or the word center)"
  728. ***************
  729. *** 538,558 ****
  730. X  .I
  731. X  Default value:    +0+0
  732. X  .P
  733. X  .\" ========================================================================
  734. X  .SH ADDITIONAL KEY BINDINGS
  735. X  .LP
  736. X  Like
  737. ! .I olwm, olvwm
  738. X  uses key bindings for certain actions:  all actions specified in
  739. ! .I olwm
  740. X  as well as an additional set of actions to control the view into the desktop.
  741. X  In the following list, the key mentioned in parentheses is the default binding
  742. X  for the given action; items marked with a plus sign '+' are items which
  743. X  exist in
  744. ! .I olwm;
  745. X  they are included here to describe what action they have when they occur
  746. X  on the root window or within the VDM.  All other bindings are specific to
  747. ! .I olvwm;
  748. X  those items marked  with an asterisk '*' involve keyboard grabs.  Bindings
  749. X  which involve a keyboard grab (those with an asterisk) are always active,
  750. X  no matter where the input focus is;
  751. --- 549,704 ----
  752. X  .I
  753. X  Default value:    +0+0
  754. X  .P
  755. + .TP
  756. + .BI PointerWorkspace " (Boolean)"
  757. + If true,
  758. + .B olvwm
  759. + will change the cursor when it is over window frames and other olvwm-owned
  760. + windows.  If False,
  761. + .B olvwm
  762. + will not change the cursor.  This is useful in conjunction with
  763. + \fIxsetroot -cursor\fP
  764. + if you want the specified cursor to be active over frames.
  765. + .I
  766. + Default value:  True
  767. + .P
  768. + .TP
  769. + .BI SaveWorkspaceCmd " (String)"
  770. + If set, this is the command that will be run when the SAVE_WORKSPACE command
  771. + is selected off the main menu.  Otherwise, the default command is run.
  772. + .I
  773. + Default value: owplaces -silent -multi -script -tw -output $HOME/.openwin-init
  774. + .P
  775. + .TP
  776. + .BI SyntheticEvents " (boolean)"
  777. + This resource controls the delivery of synthetic events.  This resource is
  778. + only valid if the -allowSynthetic argument was given to olvwm on startup;
  779. + if that argument was present and this resource is set to True, then olvwm
  780. + will process synthetic events.  Otherwise, synthetic events are ignored.
  781. + .I
  782. + Default value:  False
  783. + .P
  784. X  .\" ========================================================================
  785. + .SH CURSOR RESOURCES
  786. + .LP
  787. + These set of resources change the default cursors the window
  788. + manager gives certain classes it creates, such as resize buttons,
  789. + close buttons, frames, icons, etc.  The <cursor string> is described
  790. + as follows:
  791. + .IP
  792. + <cursor font name> <cursor index> [<fore color> [<back color>]]
  793. + .LP
  794. + where options enclosed in []'s are optional.  If the <back color>
  795. + is left out, the default back color (which, in this version of
  796. + OLVWM, is white) is used.  If the <fore color> is left out, then
  797. + the default cursor (foreground) color is used, which is black
  798. + by default, unless set by the cursorColor resource (see below).
  799. + Note that to supply the <back color>, you must supply the
  800. + <fore color>.  Also, if the color name you provide is invalid,
  801. + OLVWM will return to the default colors, as described above.  As
  802. + per usual with resources, no errors are reported.  The cursor font
  803. + is assumed to be encoded so that the valid mask for the cursor follows
  804. + the cursor index in the font; this is the usual behavior for font files.
  805. + .LP
  806. + There is an alternate form of <cursor string>:
  807. + .IP
  808. + <cursor name> [<fore color> [<back color>]]
  809. + .LP
  810. + where <cursor name> is either the name of the X cursor as defined in
  811. + cursorfont.h (eg: XC_X_cursor, XC_cross, etc), or the name of an
  812. + OPEN LOOK cursor as defined in olcursor.h (eg: OLC_basic, OLC_busy).
  813. + .LP
  814. + The valid <cursor>s are:
  815. + .TP
  816. + .BI CursorBasic ""
  817. + Specify the root window cursor.
  818. + .I
  819. + Default: Basic Pointer (arrow pointing NW)
  820. + .P
  821. + .TP
  822. + .BI CursorMove ""
  823. + Specify the cursor when a window is moved.
  824. + .I
  825. + Default: Basic Pointer
  826. + .P
  827. + .TP
  828. + .BI CursorBusy ""
  829. + Specify the cursor for when a window is "busy".
  830. + .I
  831. + Default: Busy Pointer (pocket watch)
  832. + .P
  833. + .TP
  834. + .BI CursorIcon ""
  835. + Specify cursor for the icon windows.
  836. + .I
  837. + Default: Basic Pointer
  838. + .P
  839. + .TP
  840. + .BI CursorResize ""
  841. + Specify cursor for the resize buttons and
  842. + when window is being "rubber-band" resized.
  843. + .I
  844. + Default: Bull's Eye
  845. + .P
  846. + .TP
  847. + .BI CursorMenu ""
  848. + Specify cursor for menu windows.
  849. + .I
  850. + Default: Basic Pointer
  851. + .P
  852. + .TP
  853. + .BI CursorTarget ""
  854. + Specify cursor for window frames.
  855. + .I
  856. + Default: Basic Pointer
  857. + .P
  858. + .TP
  859. + .BI CursorCloseUp ""
  860. + Specify cursor for close button, when NOT pressed (the button is UP).
  861. + .I
  862. + Default: Basic Pointer
  863. + .P
  864. + .TP
  865. + .BI CursorCloseDown ""
  866. + Specify cursor for close button, when pressed (the button is DOWN).
  867. + .I
  868. + Default: Basic Pointer
  869. + .P
  870. + .TP
  871. + .BI CursorSpecialResize " <Bool> [<fg corner> <bg corner> <fg move> <bg move>]"
  872. + This is a special Cursor resource which turns on specialized
  873. + resize cursors.  If <Bool> is false, then the cursor for the
  874. + resize button decorations and the "rubber-band" window are
  875. + all specified by "Cursor.Resize" as discussed above.  If
  876. + <Bool> is true, then the following modifications are turned on:
  877. + When the cursor is within the resize button decorations
  878. + on a frame, the cursor becomes a corner of the appropriate
  879. + orientation.  When the button is selected and the window is
  880. + being "rubber-band" resized, the cursor becomes the appropriate
  881. + corner with an appropriately oriented arrow.  The colors that
  882. + you can specify are limited to prevent an obscene number
  883. + of resources.  You can specify the colors (foreground and
  884. + background) of the cursors when placed in the resize decoration
  885. + without the mouse button down (described above as <fg corner>
  886. + and <bg corner>), and you can specify the colors of the
  887. + cursors when the mouse button is down the window is being
  888. + resized (described above as <fg move> and <bg move>).  Note
  889. + that you must specify either all four colors or no colors.
  890. + .\" ========================================================================
  891. X  .SH ADDITIONAL KEY BINDINGS
  892. X  .LP
  893. X  Like
  894. ! .B olwm, olvwm
  895. X  uses key bindings for certain actions:  all actions specified in
  896. ! .B olwm
  897. X  as well as an additional set of actions to control the view into the desktop.
  898. X  In the following list, the key mentioned in parentheses is the default binding
  899. X  for the given action; items marked with a plus sign '+' are items which
  900. X  exist in
  901. ! .B olwm;
  902. X  they are included here to describe what action they have when they occur
  903. X  on the root window or within the VDM.  All other bindings are specific to
  904. ! .B olvwm;
  905. X  those items marked  with an asterisk '*' involve keyboard grabs.  Bindings
  906. X  which involve a keyboard grab (those with an asterisk) are always active,
  907. X  no matter where the input focus is;
  908. ***************
  909. *** 563,568 ****
  910. --- 709,721 ----
  911. X  .B olwm
  912. X  man page for more details.
  913. X  .TP
  914. + VirtualGrabKeys " (Boolean)"
  915. + This resource controls whether the keys below marked as involving grabs will
  916. + be active or not.  If this resource is set to False, then none of the bindings
  917. + marked below with an asterisk will ever be active.
  918. + .I
  919. + Default value:  True
  920. + .TP
  921. X  Up  \fI(up-arrow)\fP +
  922. X  Move the view up one screen.
  923. X  .TP
  924. ***************
  925. *** 646,652 ****
  926. X  Move the view to the upper left corner.
  927. X  
  928. X  .TP
  929. ! RowStart \fI(Home, R7)\fP +
  930. X  Move the view NorthWest one screen.
  931. X  .TP
  932. X  JumpUpLeft \fI(R7+Ctrl)\fP +
  933. --- 799,805 ----
  934. X  Move the view to the upper left corner.
  935. X  
  936. X  .TP
  937. ! UpLeft \fI(Home, R7)\fP +
  938. X  Move the view NorthWest one screen.
  939. X  .TP
  940. X  JumpUpLeft \fI(R7+Ctrl)\fP +
  941. ***************
  942. *** 665,671 ****
  943. X  Move the view NorthWest one-half screen.
  944. X  
  945. X  .TP
  946. ! RowEnd \fI(End, R13)\fP +
  947. X  Move the view SouthWest one screen.
  948. X  .TP
  949. X  JumpDownLeft \fI(R13+Ctrl)\fP +
  950. --- 818,824 ----
  951. X  Move the view NorthWest one-half screen.
  952. X  
  953. X  .TP
  954. ! DownLeft \fI(End, R13)\fP +
  955. X  Move the view SouthWest one screen.
  956. X  .TP
  957. X  JumpDownLeft \fI(R13+Ctrl)\fP +
  958. ***************
  959. *** 781,786 ****
  960. --- 934,954 ----
  961. X  .TP
  962. X  VirtualScreen10    \fI(F10+Meta)\fP *
  963. X  Move to the tenth logical screen in the desktop.
  964. + .TP
  965. + SaveWorkspace \fI(F10+Meta+Alt+Shift)\fP *
  966. + Execute a Save Workspace command
  967. + .TP
  968. + ToggleDragWindows \fI(F6+Alt+Shift)\fP *
  969. + Toggles the setting of the DragWindow resource
  970. + .TP
  971. + ToggleMoveGroups \fI(g+Alt)\fP *
  972. + Toggles the setting of the VirtualMoveGroup resource
  973. + .TP
  974. + ToggleSizeFullZoomX \fI(F3+Alt+Shift)\fP *
  975. + Toggles the setting of the FullSizeZoomX resource
  976. + .TP
  977. + ToggleSticky \fI(s+Alt)\fP *
  978. + Toggles the sticky state of the window with input focus.
  979. X  .\" ========================================================================
  980. X  .SH ADVANCED USAGE
  981. X  .I olvwm
  982. ***************
  983. *** 844,852 ****
  984. X  work contained in this application.
  985. X  .br
  986. X  Addition fixes and enhancements have been provided by Rich Berlin,
  987. ! David Chase and David Plotkin at Sun, Ken West at Protocol Systems,
  988. X  Russel Kegley at General Dynamics, Chuck Musciano at Harris Systems,
  989. X  Alexander Dupuy at Columbia, David Boyd at Sterling Software, Duane
  990. ! Gibson at Unify, Eric Fifer at Salomon, Andreas Stolcke, and Paul Eggert.
  991. X  In addition, several people from the net are not mentioned here but
  992. X  contributed duplicate fixes.
  993. --- 1012,1023 ----
  994. X  work contained in this application.
  995. X  .br
  996. X  Addition fixes and enhancements have been provided by Rich Berlin,
  997. ! David Chase, Hinrich Tobaben and David Plotkin at Sun, Ken West at Protocol Systems,
  998. X  Russel Kegley at General Dynamics, Chuck Musciano at Harris Systems,
  999. X  Alexander Dupuy at Columbia, David Boyd at Sterling Software, Duane
  1000. ! Gibson at Unify, Eric Fifer and Harry Protoolis at Salomon,
  1001. ! Andreas Stolcke, Paul Eggert, Murray Laing at the University of Edinburgh,
  1002. ! Nir Samburski at Zoran Microelectronics LTD, Jimmy Guggemos at Lawrence
  1003. ! Berkeley Labs, and Matthias Pfuetzner.
  1004. X  In addition, several people from the net are not mentioned here but
  1005. X  contributed duplicate fixes.
  1006. *** BUILD/olvwmrc.man    Sat Jun 13 15:50:10 1992
  1007. --- src/olvwmrc.man    Sat Jun 13 15:43:25 1992
  1008. ***************
  1009. *** 1,5 ****
  1010. ! .\" @(#)olvwmrc.man    1.1 olvwm version 1/3/92
  1011. ! .TH OLVWMRC 5 "15 November 1991"
  1012. X  .SH NAME
  1013. X  olvwmrc \- Resource file for the OPEN LOOK Virtual Window Manager
  1014. X  .SH SYNOPSIS
  1015. --- 1,5 ----
  1016. ! .\" @(#)olvwmrc.man    1.2 olvwm version 6/13/92
  1017. ! .TH OLVWMRC 5 "22 May 1992"
  1018. X  .SH NAME
  1019. X  olvwmrc \- Resource file for the OPEN LOOK Virtual Window Manager
  1020. X  .SH SYNOPSIS
  1021. ***************
  1022. *** 64,70 ****
  1023. X  Key (F1-F10), or a Right Key (R1-R15).  The key may be specified by itself
  1024. X  or with any one or more of the following modifiers:  Shift, Control, Alt,
  1025. X  Meta, Hyper, Super, Shift Lock, or Caps Lock, in which case the key
  1026. ! must be pressed with the given modifiers.  Keyboards other than Sun-4
  1027. X  will have to set up key mappings to generate X function or right key symbols.
  1028. X  .LP
  1029. X  The functionality for a key specified in a binding in
  1030. --- 64,70 ----
  1031. X  Key (F1-F10), or a Right Key (R1-R15).  The key may be specified by itself
  1032. X  or with any one or more of the following modifiers:  Shift, Control, Alt,
  1033. X  Meta, Hyper, Super, Shift Lock, or Caps Lock, in which case the key
  1034. ! must be pressed with the given modifiers.  Keyboards other than Sun Type-4
  1035. X  will have to set up key mappings to generate X function or right key symbols.
  1036. X  .LP
  1037. X  The functionality for a key specified in a binding in
  1038. ***************
  1039. *** 80,86 ****
  1040. X  it is recommend that at least one modifier be
  1041. X  used for keys in this manner so as not to conflict with other key meanings.
  1042. X  .LP
  1043. ! There are six valid actions which can be associated with a key:
  1044. X  .IP \fBWarp\fR
  1045. X  This action requires a single identifier.  The youngest window
  1046. X  matching this identifier will be located, and the view into the desktop
  1047. --- 80,86 ----
  1048. X  it is recommend that at least one modifier be
  1049. X  used for keys in this manner so as not to conflict with other key meanings.
  1050. X  .LP
  1051. ! There are eight valid actions which can be associated with a key:
  1052. X  .IP \fBWarp\fR
  1053. X  This action requires a single identifier.  The youngest window
  1054. X  matching this identifier will be located, and the view into the desktop
  1055. ***************
  1056. *** 102,107 ****
  1057. --- 102,118 ----
  1058. X  window will be matched against this list and those which match any
  1059. X  identifier in the list will be raised.  Windows will be raised youngest
  1060. X  first, so that the oldest windows in the list will end up on top.
  1061. + .IP \fBLower\fR
  1062. + This action requires a list of identifiers separated by commas.  Each
  1063. + window will be matched against this list and those which match any
  1064. + identifier in the list will be lowered.  Windows will be lowered youngest
  1065. + first, so that the oldest windows in the list will end up on the bottom.
  1066. + .IP \fBRaiseLower\fR
  1067. + This action requires a list of identifiers separated by commas.  Each
  1068. + window will be matched against this list and those which match any
  1069. + identifier in the list will be raised to the top of the stack if they
  1070. + are partially obscured or lowered to the bottom of the stack if they are
  1071. + on top.
  1072. X  .IP \fBExecute\fR
  1073. X  This action requires a list of commands separated by commas.  Each
  1074. X  command will be executed via a Bourne-shell in the same manner as
  1075. ***************
  1076. *** 215,221 ****
  1077. X  }
  1078. X  .SH
  1079. X  .LP
  1080. ! If you select the Calendar Manager from your WINMENU, then the view will
  1081. X  warp to your Mail Tool instead of your file manager, and your file
  1082. X  manager, if closed, will be opened.  [This isn't that contrived an example:
  1083. X  pretend your file manager is sticky and your mail tool isn't, and you
  1084. --- 226,232 ----
  1085. X  }
  1086. X  .SH
  1087. X  .LP
  1088. ! If you select the File Manager from your WINMENU, then the view will
  1089. X  warp to your Mail Tool instead of your file manager, and your file
  1090. X  manager, if closed, will be opened.  [This isn't that contrived an example:
  1091. X  pretend your file manager is sticky and your mail tool isn't, and you
  1092. ***************
  1093. *** 240,245 ****
  1094. --- 251,309 ----
  1095. X  xterm { Raise:  OLVWM_USE_SELECTION }
  1096. X  .LP
  1097. X  will raise only the xterm corresponding to the one selected via the WINMENU.
  1098. + .SH RESOURCES AND KEY BINDINGS
  1099. + .LP
  1100. + There are a few resources which are particular to the operation of olvwmrc.
  1101. + .P
  1102. + .TP
  1103. + .BI VirtualReRead " (boolean)"
  1104. + When this resource is True,
  1105. + .B olvwm
  1106. + will re-read the .olvwmrc file whenever it receives a Function Key event.
  1107. + This will happen whenever a function key is pressed in the VDM or on the
  1108. + root window, or whenever a function key grabbed by
  1109. + .B olvwm
  1110. + is pressed.
  1111. + .I
  1112. + Default value:  True
  1113. + .P
  1114. + .TP
  1115. + .BI NoVirtualKey " (list of windows)"
  1116. + This resource disables the virtual keys set up in .olvwmrc for a particular
  1117. + window.  The list of windows follows the same syntax as other resource lists
  1118. + like MinimalDecor and VirtualSticky.  When a window in this list has the input
  1119. + focus and the user executes a key sequence which is mentioned in .olvwmrc,
  1120. + that key sequence will be passed to the application rather than initiating
  1121. + the olvwmrc action.  Note that this disabling applies only to bindings
  1122. + established via entries in .olvwmrc; normal
  1123. + .B olvwm
  1124. + and
  1125. + .B olwm
  1126. + bindings are not affected.
  1127. + .I
  1128. + Default value:  None
  1129. + .P
  1130. + .TP
  1131. + .BI NoVirtualFKey " (list of windows)"
  1132. + This resource is like NoVirtualKey, but only the Function keys F1 to F10
  1133. + will be disabled for the given window.
  1134. + .I
  1135. + Default value:  None
  1136. + .P
  1137. + .TP
  1138. + .BI NoVirtualLKey " (list of windows)"
  1139. + This resource is like NoVirtualKey, but only the keys L1 to L10 (which map to
  1140. + F11-F20 on non-Sun keyboards)
  1141. + will be disabled for the given window.
  1142. + .I
  1143. + Default value:  None
  1144. + .P
  1145. + .TP
  1146. + .BI NoVirtualRKey " (list of windows)"
  1147. + This resource is like NoVirtualKey, but only the keys R1 to R15
  1148. + will be disabled for the given window.
  1149. + .I
  1150. + Default value:  None
  1151. X  .SH SEE ALSO
  1152. X  .LP
  1153. X  olvwm(1), olwm(1)
  1154. ***************
  1155. *** 246,249 ****
  1156. X  .SH NOTES
  1157. X  .LP
  1158. X  Please see the LEGAL_NOTICES file for full disclosure of copyright
  1159. ! information.
  1160. --- 310,317 ----
  1161. X  .SH NOTES
  1162. X  .LP
  1163. X  Please see the LEGAL_NOTICES file for full disclosure of copyright
  1164. ! information and olvwm(1) for acknowledgments.
  1165. ! .SH BUGS
  1166. ! .LP
  1167. ! The multiple interfaces for NoVirtualKeys is something only a Wall Street
  1168. ! trader could appreciate.
  1169. *** BUILD/olvwmrc.y    Sat Jun 13 15:51:04 1992
  1170. --- src/olvwmrc.y    Sat Jun 13 15:43:25 1992
  1171. ***************
  1172. *** 4,10 ****
  1173. X   */ 
  1174. X  
  1175. X  %{
  1176. ! #ident  "@(#)olvwmrc.y    1.2 olvwm version 1/27/92"
  1177. X  
  1178. X  #include <stdio.h>
  1179. X  #include <string.h>
  1180. --- 4,10 ----
  1181. X   */ 
  1182. X  
  1183. X  %{
  1184. ! #ident  "@(#)olvwmrc.y    1.3 olvwm version 6/13/92"
  1185. X  
  1186. X  #include <stdio.h>
  1187. X  #include <string.h>
  1188. ***************
  1189. *** 28,42 ****
  1190. X  
  1191. X  extern CheckForKeyProg();
  1192. X  char    *LookupToken();
  1193. X  
  1194. - static char     sccsid[] = "@(#)olvwmrc.y    1.1 olvwm version 1/2/92";
  1195. X  typedef struct progscreen {
  1196. X      char        *target;
  1197. X      int         screen;
  1198. X  } ProgScreen;
  1199. X  
  1200. ! typedef enum { Warp, Open, Raise, Execute, Goto, Close, Quit } Action;
  1201. X  
  1202. X  typedef struct progkeynode {
  1203. X      Action    action;
  1204. --- 28,42 ----
  1205. X  
  1206. X  extern CheckForKeyProg();
  1207. X  char    *LookupToken();
  1208. + char    *FindOlvwmRC();
  1209. X  
  1210. X  typedef struct progscreen {
  1211. X      char        *target;
  1212. X      int         screen;
  1213. X  } ProgScreen;
  1214. X  
  1215. ! typedef enum { Warp, Open, Raise, Execute, Goto, Close, Quit,
  1216. !         RaiseLower, Lower } Action;
  1217. X  
  1218. X  typedef struct progkeynode {
  1219. X      Action    action;
  1220. ***************
  1221. *** 91,96 ****
  1222. --- 91,98 ----
  1223. X  %token    <sval> ENDDQUOTE
  1224. X  %token    <ival> WINMENU
  1225. X  %token  <ival> PLUS
  1226. + %token    <ival> RAISELOWER
  1227. + %token    <ival> LOWER
  1228. X  
  1229. X  %type    <sval> List
  1230. X  %type    <ival> Modifier
  1231. ***************
  1232. *** 99,104 ****
  1233. --- 101,108 ----
  1234. X  %type    <sval> WarpAction
  1235. X  %type    <sval> OpenAction
  1236. X  %type    <sval> RaiseAction
  1237. + %type    <sval> RaiseLowerAction
  1238. + %type    <sval> LowerAction
  1239. X  %type    <sval> GotoAction
  1240. X  %type    <sval> ExecuteAction
  1241. X  %type    <sval> CloseAction
  1242. ***************
  1243. *** 184,189 ****
  1244. --- 188,197 ----
  1245. X          { $$ = ListCons($2, $1); }
  1246. X      |    Actions QuitAction
  1247. X          { $$ = ListCons($2, $1); }
  1248. +     |    Actions RaiseLowerAction
  1249. +         { $$ = ListCons($2, $1); }
  1250. +     |    Actions LowerAction
  1251. +         { $$ = ListCons($2, $1); }
  1252. X  
  1253. X  WarpAction :    WARP COLON String
  1254. X              { 
  1255. ***************
  1256. *** 225,230 ****
  1257. --- 233,258 ----
  1258. X                  $$ = p;
  1259. X              }
  1260. X              
  1261. + RaiseLowerAction:    RAISELOWER COLON List
  1262. +             { 
  1263. +                 ProgKeyNode    *p;
  1264. +                 p = (ProgKeyNode *) MemAlloc(sizeof(ProgKeyNode));
  1265. +                 p->action = RaiseLower;
  1266. +                 p->parameter = $3;
  1267. +                 $$ = p;
  1268. +             }
  1269. +             
  1270. + LowerAction:    LOWER COLON List
  1271. +             { 
  1272. +                 ProgKeyNode    *p;
  1273. +                 p = (ProgKeyNode *) MemAlloc(sizeof(ProgKeyNode));
  1274. +                 p->action = Lower;
  1275. +                 p->parameter = $3;
  1276. +                 $$ = p;
  1277. +             }
  1278. +             
  1279. X  RaiseAction:    RAISE COLON List
  1280. X              { 
  1281. X                  ProgKeyNode    *p;
  1282. ***************
  1283. *** 524,529 ****
  1284. --- 552,591 ----
  1285. X          free(s);
  1286. X          break;
  1287. X  
  1288. +     case RaiseLower:
  1289. +         s = strdup(p->parameter);
  1290. +         t = LookupToken(s, ",");
  1291. +         while (t) {
  1292. +             l = ActiveClientList;
  1293. +         if (!strcmp(t, OLVWM_USE_SELECTION))
  1294. +             ClientToggleStacking(cli);
  1295. +         else for (c = ListEnum(&l); c != NULL; c = ListEnum(&l))
  1296. +             if (findClient(c, t))
  1297. +                 ClientToggleStacking(c);
  1298. +         t = LookupToken(NULL, ",");
  1299. +         }
  1300. +         free(s);
  1301. +         break;
  1302. +     case Lower:
  1303. +         s = strdup(p->parameter);
  1304. +         t = LookupToken(s, ",");
  1305. +         while (t) {
  1306. +             l = ActiveClientList;
  1307. +         if (!strcmp(t, OLVWM_USE_SELECTION))
  1308. +             if (cli->wmState == IconicState)
  1309. +              LowerWindow(cli->iconwin);
  1310. +             else LowerWindow(cli->framewin);
  1311. +         else for (c = ListEnum(&l); c != NULL; c = ListEnum(&l))
  1312. +             if (findClient(c, t))
  1313. +                 if (c->wmState == IconicState)
  1314. +                     LowerWindow(c->iconwin);
  1315. +                 else LowerWindow(c->framewin);
  1316. +         t = LookupToken(NULL, ",");
  1317. +         }
  1318. +         free(s);
  1319. +         break;
  1320. X      case Execute:
  1321. X          s = strdup(p->parameter);
  1322. X          t = LookupToken(s, ",");
  1323. ***************
  1324. *** 568,594 ****
  1325. X      ClientSetFocus(c, True, CurrentTime);
  1326. X  }
  1327. X  
  1328. X  InitOlvwmRC(ldpy)
  1329. X      Display    *ldpy;
  1330. X  
  1331. X  {
  1332. ! char    *path, s[256];
  1333. ! extern char    *getenv();
  1334. X  
  1335. !     while (1) {
  1336. !     /* try reading OLVWMRC */
  1337. !     path = getenv("OLVWMRC");
  1338. !     if (path)
  1339. !         if (yyin = fopen(path, "r"))
  1340. !         break;
  1341. !         sprintf(s, ".olvwmrc");
  1342. !         if (yyin = fopen(s, "r"))
  1343. !         break;
  1344. !     sprintf(s, "%s/.olvwmrc", getenv("HOME"));
  1345. !     if (yyin = fopen(s, "r"))
  1346. !         break;
  1347. X      return;
  1348. !     }
  1349. X      dpy = ldpy;
  1350. X      yyparse();
  1351. X  #ifdef DEBUG
  1352. --- 630,677 ----
  1353. X      ClientSetFocus(c, True, CurrentTime);
  1354. X  }
  1355. X  
  1356. + char *
  1357. + FindOlvwmRC(buf)
  1358. +     struct stat    *buf;
  1359. + {
  1360. + char    *path;
  1361. + static char    s[256];
  1362. + extern char    *getenv();
  1363. + struct stat    tmp;
  1364. +     if (buf == NULL)
  1365. +     buf = &tmp;
  1366. +     /* try reading OLVWMRC */
  1367. +     path = getenv("OLVWMRC");
  1368. +     if (path && stat(path, buf) == 0)
  1369. +     return path;
  1370. +     /* try reading current directory */
  1371. +     sprintf(s, ".olvwmrc");
  1372. +     if (stat(s, buf) == 0)
  1373. +     return s;
  1374. +     if ((path = getenv("HOME")) != NULL) {
  1375. +         sprintf(s, "%s/.olvwmrc", getenv("HOME"));
  1376. +     if (stat(s, buf) == 0)
  1377. +         return s;
  1378. +     }
  1379. +     return NULL;
  1380. + }
  1381. + static struct stat olvwmBuf;
  1382. + static struct stat olvwmOldBuf;
  1383. X  InitOlvwmRC(ldpy)
  1384. X      Display    *ldpy;
  1385. X  
  1386. X  {
  1387. ! char    *path = FindOlvwmRC(&olvwmBuf);
  1388. X  
  1389. !     if (path == NULL || (yyin = fopen(path, "r")) == NULL)
  1390. X      return;
  1391. !     olvwmOldBuf = olvwmBuf;
  1392. X      dpy = ldpy;
  1393. X      yyparse();
  1394. X  #ifdef DEBUG
  1395. ***************
  1396. *** 599,604 ****
  1397. --- 682,705 ----
  1398. X      fclose(yyin);
  1399. X  }
  1400. X  
  1401. + /*
  1402. +  * Check to see if olvwmrc has been changed since we last read it
  1403. +  */
  1404. + CheckOlvwmRC(dpy)
  1405. +     Display *dpy;
  1406. + {
  1407. + char *p = FindOlvwmRC(&olvwmBuf);
  1408. +     if (p == NULL
  1409. +           || olvwmBuf.st_mtime != olvwmOldBuf.st_mtime
  1410. +           || olvwmBuf.st_size != olvwmOldBuf.st_size
  1411. +           || olvwmBuf.st_dev != olvwmOldBuf.st_dev
  1412. +           || olvwmBuf.st_ino != olvwmOldBuf.st_ino) {
  1413. +       RefreshKeyGrabs(dpy);
  1414. +       olvwmOldBuf = olvwmBuf;
  1415. +     }
  1416. + }
  1417. X  DestroyProgScreen(p)
  1418. X      ProgScreen    *p;
  1419. X  {
  1420. ***************
  1421. *** 616,622 ****
  1422. X  DestroyProgKey(p)
  1423. X      ProgKey    *p;
  1424. X  {
  1425. !     ListApply(p->todo, DestroyProgKeyNode);
  1426. X      ListDestroy(p->todo);
  1427. X      return False;
  1428. X  }
  1429. --- 717,723 ----
  1430. X  DestroyProgKey(p)
  1431. X      ProgKey    *p;
  1432. X  {
  1433. !     ListApply(p->todo, DestroyProgKeyNode, 0);
  1434. X      ListDestroy(p->todo);
  1435. X      return False;
  1436. X  }
  1437. ***************
  1438. *** 624,631 ****
  1439. X  DestroyWinMenuActions(p)
  1440. X      WinMenuActions    *p;
  1441. X  {
  1442. !     ListApply(p->actions, DestroyProgKeyNode);
  1443. X      ListDestroy(p->actions);
  1444. X  }
  1445. X  
  1446. X  ReInitOlvwmRC(ldpy)
  1447. --- 725,733 ----
  1448. X  DestroyWinMenuActions(p)
  1449. X      WinMenuActions    *p;
  1450. X  {
  1451. !     ListApply(p->actions, DestroyProgKeyNode, 0);
  1452. X      ListDestroy(p->actions);
  1453. +     return False;
  1454. X  }
  1455. X  
  1456. X  ReInitOlvwmRC(ldpy)
  1457. ***************
  1458. *** 632,642 ****
  1459. X      Display    *ldpy;
  1460. X  
  1461. X  {
  1462. !     ListApply(ProgScreenList, DestroyProgScreen);
  1463. X      ListDestroy(ProgScreenList);
  1464. !     ListApply(ProgKeyList, DestroyProgKey);
  1465. X      ListDestroy(ProgKeyList);
  1466. !     ListApply(WinMenuActionsList, DestroyWinMenuActions);
  1467. X      ListDestroy(WinMenuActionsList);
  1468. X      ProgScreenList = NULL;
  1469. X      ProgKeyList = NULL;
  1470. --- 734,744 ----
  1471. X      Display    *ldpy;
  1472. X  
  1473. X  {
  1474. !     ListApply(ProgScreenList, DestroyProgScreen, 0);
  1475. X      ListDestroy(ProgScreenList);
  1476. !     ListApply(ProgKeyList, DestroyProgKey, 0);
  1477. X      ListDestroy(ProgKeyList);
  1478. !     ListApply(WinMenuActionsList, DestroyWinMenuActions, 0);
  1479. X      ListDestroy(WinMenuActionsList);
  1480. X      ProgScreenList = NULL;
  1481. X      ProgKeyList = NULL;
  1482. ***************
  1483. *** 824,829 ****
  1484. --- 926,933 ----
  1485. X  
  1486. X      if (!cli->framewin)
  1487. X      return NULL;
  1488. +     if (findClient_rootid != cli->screen)
  1489. +     return NULL;
  1490. X      if (!menu->buttonCount++)
  1491. X      menu->buttons = (Button **) MemAlloc(sizeof(Button *));
  1492. X      else menu->buttons = (Button **)
  1493. ***************
  1494. *** 837,843 ****
  1495. X  
  1496. X      b->label[0].kind = StringLabel;
  1497. X      b->label[1].kind = NoType;
  1498. !     b->label[0].string = MemAlloc(len + 3);
  1499. X      b->label[0].string[0] = '\0';
  1500. X      if (cli->wmState == IconicState)
  1501. X          strcat(b->label[0].string, "\244");
  1502. --- 941,947 ----
  1503. X  
  1504. X      b->label[0].kind = StringLabel;
  1505. X      b->label[1].kind = NoType;
  1506. !     b->label[0].string = MemAlloc(len + 4);
  1507. X      b->label[0].string[0] = '\0';
  1508. X      if (cli->wmState == IconicState)
  1509. X          strcat(b->label[0].string, "\244");
  1510. ***************
  1511. *** 856,861 ****
  1512. --- 960,994 ----
  1513. X      return NULL;
  1514. X  }
  1515. X  
  1516. + static int
  1517. + cmpButton(b1, b2)
  1518. +     Button    **b1, **b2;
  1519. + {
  1520. + int    type;
  1521. + char    buf1[256], buf2[256];
  1522. +     type = ((*b1)->label[0].string[0] == '\244') |
  1523. +        (((*b2)->label[0].string[0] == '\244') << 1);
  1524. +     switch(type) {
  1525. +     default:
  1526. +     case 0:
  1527. +             return strcmp(gettext((*b1)->label[0].string),
  1528. +                 gettext((*b2)->label[0].string));
  1529. +     case 1:
  1530. +         return 1;
  1531. +     case 2:
  1532. +         return -1;
  1533. +     case 3:
  1534. +         strnlower(buf1, gettext((*b1)->label[0].string + 1),
  1535. +               strlen(gettext((*b1)->label[0].string + 1)));
  1536. +         strnlower(buf2, gettext((*b2)->label[0].string + 1),
  1537. +               strlen(gettext((*b2)->label[0].string + 1)));
  1538. +             return strcmp(buf1, buf2);
  1539. +     }
  1540. + }
  1541. X  GenWinMenuFunc(dpy, menuInfo, bindex, cache, winInfo, depth)
  1542. X      Display    *dpy;
  1543. X      MenuInfo    *menuInfo;
  1544. SHAR_EOF
  1545. true || echo 'restore of olvwm3.Patch02 failed'
  1546. fi
  1547. echo 'End of  part 2'
  1548. echo 'File olvwm3.Patch02 is continued in part 3'
  1549. echo 3 > _shar_seq_.tmp
  1550. exit 0
  1551. -- 
  1552. ---
  1553. Senior Systems Scientist        mail: dcmartin@msi.com
  1554. Molecular Simulations, Inc.        uucp: uunet!dcmartin
  1555. 796 North Pastoria Avenue        at&t: 408/522-9236
  1556.